总结:C++中用cin对象进行字符和字符串的输入几种方法 您所在的位置:网站首页 C++ 中常见的几种输入字符串的方法 总结:C++中用cin对象进行字符和字符串的输入几种方法

总结:C++中用cin对象进行字符和字符串的输入几种方法

2024-06-18 23:06| 来源: 网络整理| 查看: 265

几个概念

1)cin是istream类的一个对象 2)cin对象将标准输入表示为字节流,通常情况下,通过键盘来生成这种字符流 3)istream重载了抽取运算符>>,用于从输入流中抽取字符 通常可以这样使用:cin >> value_holder; 其中value_holder为存储输入的内存单元,它可以是变量,引用,解除引用的指针,也可以是类或结构的成员。 4)格式化输入函数:可以将输入数据转换为目标指定的格式 5)抽取运算符 >>属于格式化输入函数 经典的运算符函数原型 :istream& operator >> (int &); 即传入参数为某类型(int / double / char / char* 等)的引用,返回值为istream类型的引用 由于返回值为调用对象的引用,则可以直接修改参数的变量的值,并且,这使得能够将输入拼接起来,如:cin >> a >> b >> c;

注意:

抽取运算符>>跳过空白(空格、换行符、制表符)!!! ,直到遇到非空白字符。

单字符输入

(1)成员函数get(char&) 传入参数为char类型的引用,返回值类型为调用它的istream对象,这意味着 可以拼接 get(char&)后面的其它抽取,如:

char c1, c2, c3; cin.get(c1).get(c2) >> c3;

如果cin.get(char&)到达文件尾----无论是真正的文件尾,还是通过键盘仿真的文件尾(对于Windows命令提示符模式和DOS,为按下Ctrl + Z;对于UNIX,是在首行按下Ctrl + D),它都不会给参数赋值。另外,该方法还调用setstate(failbit),导致cin的测试结果为false:

char ch; while (cin.get(ch)) { //程序 }

只要存在有效输入,cin.get(ch)的返回值都将是cin,此时的判定结果为true,因此循环将继续。到达文件尾时,返回值判定为false,循环终止。

(2)成员函数get() 没有传入参数,返回值类型为int(或某种更大的整型,这取决于字符集和区域),因此不可以拼接!

char ch; ch = cin.get();

到达文件后(不管是真的文件尾还是模拟的文件尾),cin.get()都将返回值EOF—头文件iostream提供的一个符号常量。这种设计特性使得可以这样来读取输入:

int ch; //注意:这里ch的类型为int,而不是char,因为值EOF可能无法使用char类型来表示。 while ((ch = cin.get()) != EOF) { //程序 } 注意事项:

在使用char参数 get(char) 或没有参数 get() 的情况下,get()方法读取下一个输入字符,即使该字符是空格、制表符或换行符。即:不会跳过空白字符(空格、换行符、制表符)!!!

特征cin.get(ch)ch = cin.get()传输输入字符的方法赋给参数 ch将函数返回值赋给 ch字符输入时函数的返回值指向 istream 对象的引用字符编码(int值)到达文件尾时函数的返回值转换为falseEOF 采用哪种单字符输入形式?

首先,应确定是否希望跳过空白,如果跳过空白方便,则使用抽取运算符>> 如果希望程序检查每个字符,应使用get()方法,例如,计算字数的程序可以使用空格来判断单词何时结束。在get()方法中,get(char&)的接口更佳。没有参数的get()主要优点是,它与标准C语言中getchar()函数极其类似,这意味着可以通过包含iostream()(而不是stdio.h),并使用cin.get()替换所有的getchar(),用cout.put(ch)替换所有的putchar(char),来将C程序转换为C++程序

字符串输入 istream& get(char*, int); istream& get(char*, int, char); istream& getline(char*, int); istream& getline(char*, int, char);

第一个参数,用于放置输入字符串的内存单元的地址 第二个参数,比读取的最大字符数大1(额外的一个字符用于存储结尾的空字符,以便将输入存为一个字符串) 第三个参数,指定用于作为分界符的字符,只有两个参数的版本将换行符用作分界符。 上述4个函数都在读取最大数目的字符或遇到换行符后为止。

注意区别:

get()将分界符留在输入流中,这样接下来的输入操作首先看到的将是分界符,而getline()抽取并丢弃输入流中的分界符 可以参考一下代码体会一下!

#include const int Limit = 255; int main() { using std::cout; using std::cin; using std::endl; char input[Limit]; cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有